/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package model.dao;

import lib.*;
import model.dao.vo.*;

import java.sql.*;
import java.util.*;

/**
 *
 * @author felipe
 */
public class SalaDAO extends DAO {

    public SalaDAO()
    {
        super();
    }

    public Iterator<SalaVO> listaSala(CinemaVO cinema)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("sala_id, sala_nome, cinema_id, sala_capacidade, sala_ativo")
                .from("sala")
                .where("cinema_id = " + cinema.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                List<SalaVO> salas = new ArrayList<SalaVO>();
                while(rs.next())
                {
                    SalaVO s = new SalaVO();
                    s.setId(rs.getInt("sala_id"));
                    s.setNome(rs.getString("sala_nome"));
                    s.setCinema(cinema);
                    s.setCapacidade(rs.getInt("sala_capacidade"));
                    s.setAtivo(rs.getBoolean("sala_ativo"));
                    salas.add(s);
                }
                if ( ! salas.isEmpty()){
                    return (Iterator<SalaVO>) salas.iterator();
                }
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error listaSala method " , e);
        }
        return null;
    }

    public Iterator<SalaVO> listaSala(SalaVO sala)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("sala_id, sala_nome, cinema_id, sala_capacidade, sala_ativo")
                .from("sala")
                .where("sala_nome LIKE '%" + sala.getNome() + "%'");
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                List<SalaVO> salas = new ArrayList<SalaVO>();
                while(rs.next())
                {
                    SalaVO s = new SalaVO();
                    s.setId(rs.getInt("sala_id"));
                    s.setNome(rs.getString("sala_nome"));
                    int icinema = rs.getInt("cinema_id");
                    CinemaVO cinema = new CinemaVO();
                    cinema.setId(icinema);
                    CinemaDAO cinemaDAO = new CinemaDAO();
                    cinema = cinemaDAO.buscaCinema(cinema);
                    s.setCinema(cinema);
                    s.setCapacidade(rs.getInt("sala_capacidade"));
                    s.setAtivo(rs.getBoolean("sala_ativo"));
                    salas.add(s);
                }
                if ( ! salas.isEmpty()){
                    return (Iterator<SalaVO>) salas.iterator();
                }
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error listaSala method " , e);
        }
        return null;
    }

    public SalaVO buscaSala(SalaVO sala)
    {
        SQL sql = Factory.createSQL();
        sql = sql.select("sala_id, sala_nome, cinema_id, sala_capacidade, sala_ativo")
                .from("sala")
                .where("sala_id = " + sala.getId());
        ResultSet rs = this.db.Execute(sql.toString());
        try
        {
            if ( ! rs.wasNull() )
            {
                sala.setId(rs.getInt("sala_id"));
                sala.setNome(rs.getString("sala_nome"));
                int icinema = rs.getInt("cinema_id");
                CinemaVO cinema = new CinemaVO();
                cinema.setId(icinema);
                CinemaDAO cinemaDAO = new CinemaDAO();
                cinema = cinemaDAO.buscaCinema(cinema);
                sala.setCinema(cinema);
                sala.setCapacidade(rs.getInt("sala_capacidade"));
                sala.setAtivo(rs.getBoolean("sala_ativo"));
            }
        }
        catch( SQLException e )
        {
            ErrorLog.SQLLog("Error buscaSala method " , e);
        }
        return null;
    }

    public boolean insereSala(SalaVO sala)
    {
        SQL sql = Factory.createSQL();
        sql = sql.insert()
                .into( "sala","sala_id, sala_nome, cinema_id, sala_capacidade, sala_ativo")
                .value("NULL, '" + sala.getNome() + "', " + sala.getCinema().getId() + ", " + sala.getCapacidade() + ", " + sala.getAtivo());
        int sucess = this.db.Update(sql.toString());
        if (sucess > 0 ){
            return true;
        }
        return false;
    }

    public boolean alteraSala(SalaVO sala)
    {
        SQL sql = Factory.createSQL();
        sql = sql.update("sala")
                .set("sala_nome = " + sala.getNome())
                .nset("cinema_id = " + sala.getCinema().getId())
                .nset("sala_capacidade = " + sala.getCapacidade())
                .nset("sala_ativo = " + sala.getAtivo())
                .where("sala_id = " + sala.getId());
        int sucess = this.db.Update(sql.toString());
        if (sucess > 0 ){
            return true;
        }
        return false;
    }

    public boolean apagaSala(SalaVO sala)
    {
        SQL sql = Factory.createSQL();
        sql = sql.delete("sala")
                .where("sala_id = " + sala.getId());
        int sucess = this.db.Update(sql.toString());
        if (sucess > 0 ){
            return true;
        }
        return false;
    }

}
